// 角色管理模块的接口
import request from '@/utils/request.ts'
import {
  MenuResponseData,
  RoleData,
  RoleResponseData,
} from '@/api/acl/role/type.ts'

// 枚举地址
enum API {
  // 获取全部的角色接口
  ALL_ROLES_URL = '/admin/acl/role/{page}/{limit}?roleName={roleName}',
  // 添加角色
  ADD_ROLE_URL = '/admin/acl/role/save',
  // 修改角色
  UPDATE_ROLE_URL = '/admin/acl/role/update',
  // 获取全部的菜单与按钮的数据
  ALL_PERMISSION_URL = '/admin/acl/permission/toAssign/{roleId}',
  // 给角色分配权限
  ASSIGN_PERMISSION_URL = '/admin/acl/permission/doAssign?roleId={roleId}&permissionId={permissionId}',
  // 删除已有的职位
  DELETE_ROLE_URL = '/admin/acl/role/remove/{id}',
}

// 获取全部的角色
export const reqAllRoles = (page: number, limit: number, roleName: string) =>
  request.get<any, RoleResponseData>(
    API.ALL_ROLES_URL.replace('{page}', page.toString())
      .replace('{limit}', limit.toString())
      .replace('{roleName}', roleName),
  )
// 添加与更新角色
export const reqAddOrUpdateRole = (role: RoleData) => {
  if (role.id) {
    return request.put<any, any>(API.UPDATE_ROLE_URL, role)
  } else {
    return request.post<any, any>(API.ADD_ROLE_URL, role)
  }
}
// 获取全部菜单与按钮权限数据
export const reqAllMenuList = (roleId: number) =>
  request.get<any, MenuResponseData>(
    API.ALL_PERMISSION_URL.replace('{roleId}', roleId.toString()),
  )
// 给角色分配权限
export const reqAssignPermission = (roleId: number, permissionId: number[]) => {
  return request.post(
    API.ASSIGN_PERMISSION_URL.replace('{roleId}', roleId.toString())
      // .replace('{permissionId}', permissionId.join(',')))
      .replace('{permissionId}', permissionId.toString()),
  )
  /*
  Array 对象覆盖了 Object 的 toString 方法。
  数组的 toString 方法实际上在内部调用了 join() 方法来拼接数组并返回一个包含所有数组元素的字符串，
  元素之间用逗号分隔。如果 join 方法不可用或者不是函数，
  则会使用 Object.prototype.toString 来代替，并返回 [object Array]。
   */
}
export const reqDeleteRole = (id: number) =>
  request.delete<any, any>(API.DELETE_ROLE_URL.replace('{id}', id.toString()))
